package com.competition.bonusrule.service;

import java.util.List;
import com.competition.bonusrule.domain.Bonusrule;
import com.competition.bonusrule.domain.vo.BonusruleVo;

/**
 * 奖金规则Service接口
 *
 * @author cui
 * @date 2025-01-21
 */
public interface IBonusruleService
{
    /**
     * 查询奖金规则
     *
     * @param ruleId 奖金规则主键
     * @return 奖金规则
     */
    public Bonusrule selectBonusruleByRuleId(Long ruleId);

    /**
     * 查询奖金规则列表
     *
     * @param bonusrule 奖金规则
     * @return 奖金规则集合
     */
    public List<Bonusrule> selectBonusruleList(Bonusrule bonusrule);

    /**
     * 新增奖金规则
     *
     * @param bonusrule 奖金规则
     * @return 结果
     */
    public int insertBonusrule(Bonusrule bonusrule);

    /**
     * 修改奖金规则
     *
     * @param bonusrule 奖金规则
     * @return 结果
     */
    public int updateBonusrule(Bonusrule bonusrule);

    /**
     * 批量删除奖金规则
     *
     * @param ruleIds 需要删除的奖金规则主键集合
     * @return 结果
     */
    public int deleteBonusruleByRuleIds(Long[] ruleIds);

    /**
     * 删除奖金规则信息
     *
     * @param ruleId 奖金规则主键
     * @return 结果
     */
    public int deleteBonusruleByRuleId(Long ruleId);

    List<BonusruleVo> selectBonusruleVoList(BonusruleVo bonusrule);

    String importRules(List<BonusruleVo> list, boolean updateSupport, String operName);

    /**
     * 查询奖金分配列表
     *
     * @param bonusruleVo 奖金分配查询条件
     * @return 奖金分配列表
     */
    List<BonusruleVo> selectBonusDistributionList(BonusruleVo bonusruleVo);

    /**
     * 根据获奖记录自动匹配奖金规则
     *
     * @param awardId 获奖记录ID
     * @return 奖金分配信息
     */
    BonusruleVo matchBonusRule(Long awardId);

    /**
     * 执行奖金分配
     *
     * @param bonusruleVo 奖金分配信息
     * @return 结果
     */
    int distributeBonus(BonusruleVo bonusruleVo);

    /**
     * 检查分配权限（第一指导老师）
     *
     * @param awardId 获奖记录ID
     * @param userId 用户ID
     * @return 是否有权限
     */
    boolean checkDistributionPermission(Long awardId, Long userId);

    /**
     * 获取团队第一指导老师
     *
     * @param teamId 团队ID
     * @return 第一指导老师用户ID
     */
    Long getFirstTeacherByTeamId(Long teamId);
}